A peripheral component interconnect (PCI) standard is a bus standard that is employed by many computer and peripherals manufacturers. More recently, PCI Express, denoted PCIe, enhances the original PCI bus standard with improved throughput, lower I/O pin count, and so on. (PCI Express is a trademark of the PCI Special Interest Group.)
Under PCIe, packets known as transaction layer packets (TLPs) are used to transfer data between devices. PCIe transactions include, but are not limited to, memory and I/O reads, memory and I/O writes, configuration reads and writes, messages, and interrupts. Memory reads, I/O reads and writes, and configuration reads and writes are considered non-posted transactions (in which the request is followed by a completion) while memory writes and messages are posted transactions (no reply necessary). Like memory writes, interrupts are posted transactions, in that there is no following transaction.
The entities involved in these transactions are known as producers and consumers. A typical system may, for example, include a CPU, an associated memory, and a network interface card (NIC). Either the NIC or the CPU may operate as a producer or as a consumer.
To make things a little easier, under PCIe, the producer/consumer model operates according to pre-defined ordering rules. In essence, these rules demand that transactions are performed in the order issued by software. Thus, two write operations followed by a read operation to the same memory location, when processed according to the ordering rules, ensures that the final read operation will return correct data from the memory location to the requester. The producer/consumer model also ensures that the software and hardware interaction is deterministic, so that special software becomes unnecessary, depending instead on the hardware hierarchy.
These ordering rules are straightforward when there is a single producer and a single consumer, both operating on a single bus. The producer and consumer each operate according to the ordering rules and transactions are processed faithfully. Where problems arise is when an additional producer or an additional consumer, operating on a different bus, is also performing transactions within the system.
The ordering rules may also be beneficial in a multi-producer storage or hardware acceleration system. As with the example, above, the presence of multiple producers makes storage or any hardware acceleration more challenging than where there is a single producer and a single consumer.
Thus, there is a continuing need for a method to order operations in a multi-producer system, whether the ordering operations involve networking, storage, or any hardware acceleration.